/**
 * 菜单组件类型定义
 */

/**
 * 菜单项接口
 */
export interface MenuItem {
  /** 菜单项唯一标识 */
  id: string | number
  /** 菜单标题 */
  title: string
  /** 菜单图标 */
  icon?: string
  /** 菜单路径 */
  path?: string
  /** 菜单URL */
  url?: string
  /** 子菜单 */
  children?: MenuItem[]
  /** 是否禁用 */
  disabled?: boolean
  /** 是否隐藏 */
  hidden?: boolean
  /** 其他自定义属性 */
  [key: string]: any
}

/**
 * 菜单标题属性接口
 */
export interface MenuTitleProps {
  /** 菜单标题 */
  title: string
  /** 菜单图标 */
  icon?: string
}

/**
 * 菜单选择事件参数
 */
export interface MenuSelectEvent {
  /** 选中的菜单项 */
  item: MenuItem
  /** 菜单项的键值 */
  key: string
}

/**
 * 菜单组件属性接口
 */
export interface MenuProps {
  /** 菜单数据数组 */
  menuData: MenuItem[]
  /** 当前激活的菜单项键值 */
  activeKey?: string
  /** 菜单选择回调函数 */
  onMenuSelect?: (item: MenuItem, key: string) => void
  /** 菜单显示模式 */
  mode?: 'vertical' | 'horizontal'
  /** 是否折叠菜单 */
  collapse?: boolean
  /** 是否只展开一个子菜单 */
  uniqueOpened?: boolean
}

/**
 * 菜单组件事件接口
 */
export interface MenuEmits {
  /** 菜单选择事件 */
  'menu-select': [item: MenuItem, key: string]
}

/**
 * 后端菜单数据结构接口
 */
export interface BackendMenuItem {
  /** 菜单ID */
  id?: string | number
  /** 菜单ID（备用字段） */
  menuId?: string | number
  /** 菜单名称 */
  name?: string
  /** 菜单标题 */
  title?: string
  /** 菜单名称（备用字段） */
  menuName?: string
  /** 菜单图标 */
  icon?: string
  /** 菜单图标（备用字段） */
  menuIcon?: string
  /** 菜单路径 */
  path?: string
  /** 菜单路径（备用字段） */
  menuRoute?: string
  /** 路由路径（备用字段） */
  routePath?: string
  /** 菜单URL */
  url?: string
  /** 是否禁用 */
  disabled?: boolean
  /** 是否隐藏 */
  hidden?: boolean
  /** 子菜单 */
  children?: BackendMenuItem[]
}

/**
 * 自定义菜单数据结构接口
 */
export interface CustomMenuItem {
  /** 菜单ID */
  id?: string | number
  /** 菜单键值 */
  key?: string
  /** 菜单名称 */
  name?: string
  /** 菜单标题 */
  title?: string
  /** 菜单标签 */
  label?: string
  /** 菜单图标 */
  icon?: string
  /** 菜单路径 */
  path?: string
  /** 菜单URL */
  url?: string
  /** 是否禁用 */
  disabled?: boolean
  /** 是否隐藏 */
  hidden?: boolean
  /** 子菜单 */
  children?: CustomMenuItem[]
}
